package com.service.impl;


import com.service.ProductEsService;
import core.Constants;
import core.entity.Product;
import core.es.ProductEs;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;

@Service
@RabbitListener(queues = {Constants.Mq.QUEUE_PRODUCT})
public class ProductMqServiceImpl {

    private ProductEsService productEsService;

    public ProductMqServiceImpl(ProductEsService productEsService) {
        this.productEsService = productEsService;
    }

    @RabbitHandler
    public void handleProduct(Product product) {
        System.out.println("consume:--" + product);
        ProductEs productEs = cleanData(product);
        // 把清理好的消息队列的数据放到es中，
        // 如果插入到es时出异常就会导致对消息的消费没有应答会不断重试
        productEsService.insertDoc(productEs);
    }

    /**
     * 清理数据：消息队列中的数据不一定都是需要放到es中的数据
     * 这里简单模仿清理数据：把价格没有放到es中（注意：是模仿，价格这种数据是可以放到es中的）
     *
     * @param product
     * @return
     */
    private ProductEs cleanData(Product product) {
        //剔除掉image字段数据，模拟数据清洗
        ProductEs productEs = new ProductEs();
        productEs.setId(product.getId());
        productEs.setName(product.getProductName());
        productEs.setProductDesc(product.getProductDesc());
        productEs.setPrice(product.getProductPrice());
        return productEs;
    }
}
